package com.demo.java.OD551_600.OD600;
import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【表达式括号匹配(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146588765
 */
public class OdMain {
        // 用于记录有效的括号对的数量
        public static int count = 0;

        public static void main(String[] args) {
            // 输入处理
            Scanner in = new Scanner(System.in);
            String input_str = in.nextLine();  // 读取输入的数学表达式

            // 创建栈来存储括号
            LinkedList<Character> stack = new LinkedList<>();
            int i = 0;

            // 遍历字符串中的每个字符
            while (true) {
                if (i >= input_str.length()) {
                    break;  // 如果遍历结束，则退出循环
                } else {
                    char currentChar = input_str.charAt(i);  // 当前字符
                    // 如果当前字符不是括号，跳过
                    if (currentChar != ')' && currentChar != '(') {
                        i += 1;
                        continue;
                    } else {
                        // 遇到右括号，检查栈顶是否有左括号
                        if (stack.size() > 0 && currentChar == ')') {
                            if (stack.getLast() == '(') {  // 如果栈顶是左括号，则匹配成功
                                stack.removeLast();  // 弹出栈顶的左括号
                                count += 1;  // 统计有效括号对
                                i += 1;
                                continue;
                            }
                            // 如果没有匹配的左括号，则输出-1并返回
                            System.out.println(-1);
                            return;
                        }
                        // 遇到左括号，将其压入栈中
                        stack.add(currentChar);
                    }
                }
                i += 1;
            }

            // 如果栈为空，则说明括号完全匹配，输出匹配对的数量，否则输出-1
            System.out.println(stack.size() > 0 ? -1 : count);
        }
}